#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "usart2.h"
#include "esp8266.h"
#include "string.h"
#include "timer.h"
#include "led.h"
#include "exti.h"
#include "lcd.h"

/*
项目的主要内容：STM32配合ESP8266模块与服务器数据交互
当开发板上电后，可在串口助手上查看现象。
按下按键（PA0即mini板的wk_up）后，可以再次获取当前天气并通过串口打印。

MCU     ESP8266
5V	   VCC
GND	     GND
PA2	   RXD
PA3	   TXD
--------------------------------
MCU     USB转TTL
5V			 VCC
GND			 GND
PA9			 RXD
PA10		 TXD
--------------------------------
MCU     LCD
5V			 VCC
GND			 GND
PB15		 SDA
PB13		 SCL
*/

u8 flag = 0;
char t;
extern Results results[];
extern nt_calendar_obj nwt;								//定义结构体变量
int hour,min,sec;										//时间变量



int main(void)
{
	
	delay_init();	    	 							//延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);		// 设置中断优先级分组2
	EXTIX_Init();										//外部中断初始化
	uart_init(115200);	 								//串口初始化为115200
	usart2_init(115200);	 							//串口初始化为115200
	LED_Init();											//LED初始化
	LCD_Init();											//LCD初始化
	TIM3_Int_Init(9999,7199);							//10Khz的计数频率，计数到10000为1s  
	LCD_Clear(0);

 	LCD_ShowString(10, 4, "wifi connect", 16, 128, 16);

	esp8266_start_trans(); 								//esp8266进行初始化，连接wifi 

	LCD_Clear(0); 

	LCD_ShowString(10, 4, "wifi connect ok", 16, 128, 16);

	delay_ms(3000);

	get_current_weather(); 								//获取天气
	delay_ms(200);
	get_beijing_time();									//获取时间	

	
	delay_ms(3000);

	LCD_Clear(0); 		
	hour = nwt.hour;
	min = nwt.min;
	sec = nwt.sec;

	TIM_Cmd(TIM3, ENABLE);  //使能TIMx外设		

	while (1)
	{

	/*******************************************
	按键中断触发，改变LED状态以及flag的值，
	当按键按下时，flag = 1,开始更新数据。	
	******************************************/
		if (flag == 1)
		{
			get_current_weather(); 						//获取天气
			delay_ms(200);
			get_beijing_time();							//获取时间				
			flag = 0;
			hour = nwt.hour;
			min = nwt.min;
			sec = nwt.sec;
		}
		
	/*******************************************
	时间计数判断，其中秒的自加在中断3实现。	
	******************************************/
		if(sec >= 60)
		{
			sec = 0;
			min ++;
		}

		if(min >= 60)
		{
			min = 0;
			hour ++;
		}

		if(hour >= 24)
		{
			hour = 0;
		}
		LCD_Clear(0); 	
		LCD_ShowString(0, 0, "Time :", 16, 128, 16);
		LCD_ShowNum(63,0,hour,2,16);						//显示小时
		LCD_ShowString(79, 0, ":", 16, 16, 16);
		LCD_ShowNum(87,0,min,2,16);							//显示分钟 
		LCD_ShowString(103, 0, ":", 16, 16, 16);
		LCD_ShowNum(111,0,sec,2,16);						//显示秒 		
		
		
		LCD_ShowString(0, 33, "weather :", 16, 128, 16);
		LCD_ShowString(90, 33, (u8*)results[0].now.text, 16, 128, 16);		//采集到的天气

		LCD_ShowString(0, 66, "Temp :", 16, 64, 16);
		LCD_ShowString(60, 66, (u8*)results[0].now.temperature, 16, 16, 16);	//采集到的温度
		//LCD_ShowCHinese(80, 6, 11); 							//摄氏度
		
		LCD_ShowString(0, 103, (u8*)results[0].location.country, 16, 128, 16);  //国家
		LCD_ShowString(0, 133, (u8*)results[0].location.name, 16, 128, 16);  	//具体位置
		delay_ms(500);
		LCD_Clear(0); 
	}
}
